perm filename XAP2[XAP,BGB]1 blob sn#046319 filedate 1973-06-03 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00007 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001	   VALID 00006 PAGES 
C00002 00002	SUBR(MKSEG0)	MAKE LINE SEGMENT.  CLIPPER.
C00005 00003	SUBR(MKSEG1)	MAKE LINE SEGMENT.
C00008 00004	SUBR(IIISIM)	OUTPUT III BUFFER ONTO XGP.
C00010 00005			FETCH AND DECODE III COMMAND WORD.
C00012 00006	EXECUTE VECTORS.
C00015 00007	SUBR(VIDEO)
C00018 ENDMK
C⊗;
SUBR(MKSEG0)	MAKE LINE SEGMENT.  CLIPPER.
BEGIN MKSEG0;_____________________________________________________
	ACCUMULATORS{R1,C1,R2,C2,Q,N}
;TEST FOR EASY OUTSIDER.
	LAC Q,C1↔LAC N,C2↔CAMLE C1,C2↔EXCH Q,N
	CAIG Q,=1727↔SKIPGE N↔POP0J
	LAC Q,R1↔LAC N,R2↔CAMLE R1,R2↔EXCH Q,N
	CAMG Q,QHI↔CAMGE N,QLO↔POP0J
;TEST FOR EASY INSIDER.
	JUMPL C1,L1↔JUMPL C2,L1
	CAILE C1,=1727↔GO L1↔CAILE C2,=1727↔GO L1
	CAMLE R1,QHI↔GO L1↔CAMLE R2,QHI↔GO L1
	CAMGE R1,QLO↔GO L1↔CAMGE R2,QLO↔GO L1↔GO MKSEG1	;DISPLAY.
;TEST FOR AND HANDLE SIMPLE CASES.
L1:	CAMN R1,R2↔GO[
	CAMN C1,C2↔POP0J↔GO HSEG]
	CAMN C1,C2↔GO VSEG
;MIDPOINT THE HARD CASE.
	PUSH P,R1↔PUSH P,C1	;SAVE 1ST END.
	ADD R1,R2↔ASH R1,-1	;MIDPOINT THE LINE SEGMENT.
	ADD C1,C2↔ASH C1,-1
;TEST FOR MIDPOINT AND 1ST END BEING COINCIDANT.
	CAMN R1,-1(P)↔GO[
	CAME C1, 0(P)↔GO .+1↔POP P,C1↔POP P,R1↔POP0J]
;RECURSION - DISPLAY ONE HALF AND THEN DISPLAY THE OTHER.
	CALL(MKSEG0)			;MIDPOINT TO 2ND END.
	LAC R2,-1(P)↔LAC C2,0(P)   
	CALL(MKSEG0)			;MIDPOINT TO 1ST END.
	POP P,C1↔POP P,R1↔POP0J
;DISPLAY HORIZONTAL LINE SEGMENT FROM (C1 MIN C2) TO (C1 MAX C2).
HSEG:	LAC Q,C1↔LAC N,C2↔CAML C1,C2↔EXCH N,Q
	SKIPGE Q↔SETZ Q,↔CAILE N,=1727↔LACI N,=1727↔SUB N,Q
	DOT(R1,Q)↔SKIPA↔IDPB 0,1↔SOJG N,.-1↔POP0J
;DISPLAY VERTICAL LINE SEGMENT FROM (R1 MIN R2) TO (R1 MAX R2).
VSEG:	LAC Q,R1↔LAC N,R2↔CAML R1,R2↔EXCH N,Q
	CAMGE Q,QLO↔LAC Q,QLO↔CAMLE N,QHI↔LAC N,QHI↔SUB N,Q
	DOT(Q,C1)↔ADDI 1,WWIDTH
	SOJG N,.-2↔POP0J
BEND MKSEG0;BGB 24 APRIL 1973.____________________________________
SUBR(MKSEG1)	MAKE LINE SEGMENT.
COMMENT / Recursive midpoint method of quantizing a line segment.
Arguments are expected in accumulators R1, C1, R2, C2; the bit
is deposited from accumulator 0./
BEGIN MKSEG1;_____________________________________________________
	ACCUMULATORS{R1,C1,R2,C2,Q,N}

;TEST FOR AND HANDLE SIMPLE CASES.
	CAMN R1,R2↔GO[
	CAMN C1,C2↔GO[DOT(R1,C1)↔POP0J]↔GO HSEG]
	CAMN C1,C2↔GO VSEG

;MIDPOINT THE HARD CASE.
	PUSH P,R1↔PUSH P,C1	;SAVE 1ST END.
	ADD R1,R2↔ASH R1,-1	;MIDPOINT THE LINE SEGMENT.
	ADD C1,C2↔ASH C1,-1

;TEST FOR MIDPOINT AND 1ST END BEING COINCIDANT.
	CAMN R1,-1(P)↔GO[
	CAME C1, 0(P)↔GO .+1↔POP P,C1↔POP P,R1
	DOT(R1,C1)↔DOT(R2,C2)↔POP0J]

;RECURSION - DISPLAY ONE HALF AND THEN DISPLAY THE OTHER.
	CALL(MKSEG1)			;MIDPOINT TO 2ND END.
	LAC R2,-1(P)↔LAC C2,0(P)   
	CALL(MKSEG1)			;MIDPOINT TO 1ST END.
	POP P,C1↔POP P,R1↔POP0J

;DISPLAY HORIZONTAL LINE SEGMENT FROM (C1 MIN C2) TO (C1 MAX C2).
HSEG:	LAC Q,C1↔LAC N,C2
	CAML C1,C2↔EXCH N,Q↔SUB N,Q
	DOT(R1,Q)↔SKIPA↔IDPB 0,1
	SOJG N,.-1↔POP0J

;DISPLAY VERTICAL LINE SEGMENT FROM (R1 MIN R2) TO (R1 MAX R2).
VSEG:	LAC Q,R1↔LAC N,R2
	CAML R1,R2↔EXCH N,Q↔SUB N,Q
	DOT(Q,C1)↔ADDI 1,WWIDTH
	SOJG N,.-2↔POP0J

BEND MKSEG1;BGB 24 APRIL 1973.____________________________________
SUBR(IIISIM)	OUTPUT III BUFFER ONTO XGP.
BEGIN IIISIM______________________________________________________

;DELTA ORIGIN DISPLACEMENT.
	SLACI 1,(2B2)↔LAC CHAR
	CAIN"*"↔SETZ 1,↔DAC 1,DELTA#

;III FILE NAME.
	CALL(GETFIL)
	INIT 17,17↔SIXBIT/DSK/↔0
	GO[FATAL(CAN'T INIT DSK)]
	LOOKUP 17,FILNAM↔GO[LAC[SIXBIT/PLT/]↔DAC EXTION
	LOOKUP 17,FILNAM↔GO[LAC[SIXBIT/III/]↔DAC EXTION
	LOOKUP 17,FILNAM↔GO[LAC[SIXBIT/DAT/]↔DAC EXTION
	LOOKUP 17,FILNAM↔GO FRET↔GO L0]↔GO L0]↔GO L0]

;EXPAND CORE FOR DUMP INPUT.
L0:	LAC JOBREL↔DAC OLD44#
	NIP 1,PPPN↔MOVN 1,1
	ADD 1,JOBREL↔DAC 1,BUFEND#
	CORE 1,↔GO[FATAL(CAN'T EXPAND CORE)]

;SAVE CURRENT BEAM POSITION.
	LAC COL↔DAC BEGCOL#
	LAC ROW↔DAC BEGROW#

;DUMP III FILE IN.
	LAC OLD44↔ADDM PPPN↔IN 17,PPPN
	LAC 1,OLD44↔LAC(1)↔CAMN[-1]↔GO VIDEO
	LAC 1,OLD44↔ADDI 1,2↔DAC 1,PC#			;III PC.
L1:	CDR 1,BUFEND↔DZM -1(1)↔DZM(1)
        CAML 1,JOBREL↔GO .+3
	LIPI 1,-1(1)↔BLT 1,JOBREL		;CLEAR TOP.
		;FETCH AND DECODE III COMMAND WORD.
ILOOP:	AOSA 1,PC
LOOP:	LAC 1,PC↔CAMLE 1,JOBFF
	CAML 1,BUFEND↔GO RET
	LAC 2,(1)
	TRNE 2,01↔GO XTEXT	;TEXT COMMAND WORD.
	TRNE 2,02↔GO XVECTR	;VECTOR COMMAND WORD.
	TRNE 2,20↔GO XCTRL	;III CONTROL WORD.
	TRNE 2,37↔GO ILOOP	;NOP & HALT COMMANDS.
RET:	LAC OLD44↔CORE↔GO[FATAL(CAN'T SHRINK CORE!)]
FRET:	RELEASE 17,
	LAC BEGCOL↔DAC COL
	LAC BEGROW↔DAC ROW
	POP0J

;EXECUTE III TEXT.
XTEXT:	PUSH P,2			;-2(P)
	PUSH P,[5]			;-1(P)
	PUSH P,[POINT 7,-2(P)]		; 0(P)
CLOOP:	ILDB 1,0(P)
	JUMPE 1,CCONT
	CAIN 1,15↔GO[LAC -4(P)↔DAC COL↔GO CCONT]
	DAC 1,CHAR
	CALL(PRINT)
CCONT:	SOSLE -1(P)↔GO CLOOP
	SUB P,[XWD 3,3]
	GO ILOOP


;EXECUTE III CONTROL OPERATIONS.
XCTRL:	TRNN 2,04↔GO[CAR 1,2↔DAC 1,PC↔GO LOOP]	;JUMP.
	TRNE 2,40↔GO LOOP	;SAVE A NOP HERE
	AOS 1,PC	;JSR
	HRLI 1,20
	CAR 2,2
	CAMLE 2,JOBFF
	CAML 2,BUFEND↔GO[ OUTSTR[ASCIZ/JSR OUT OF BOUNDS
/]↔	GO RET]
	DAC 1,(2)↔DAC 2,PC
	GO ILOOP
;EXECUTE VECTORS.
XVECTR:	TRNN 2,4
	GO [TRNN 2,10	;SHORT VECTOR OR TSS
	    GO SVECT	;SHORT VECTOR
	    GO ILOOP]	;TSS
	LDB [POINT 11,2,10]↔ROT -13		;X
	ADD DELTA↔MUL IIIDX↔PUSH P,0
	LDB [POINT 11,2,21]↔ROT -13↔MOVNS	;Y
	ADD DELTA↔MUL IIIDY↔PUSH P,0
	LDB 1,[POINT 3,2,31]
	PUSHJ P,@PLOTAB(1)
	GO ILOOP
SVECT:	PUSH P,2
	LDB [POINT 7,2,6]↔ROT -7
	ADD DELTA↔MUL IIIDX↔PUSH P,0	;X
	LDB [POINT 7,2,13]↔ROT -7↔MOVN
	ADD DELTA↔MUL IIIDY↔PUSH P,0	;Y
	LDB 1,[POINT 2,2,15]
	PUSHJ P,@PLOTAB(1)
	POP P,2
	LDB [POINT 7,2,22]↔ROT -7
	ADD DELTA↔MUL IIIDX↔PUSH P,0	;X
	LDB [POINT 7,2,29]↔ROT -7↔MOVN
	ADD DELTA↔MUL IIIDY↔PUSH P,0	;
	LDB 1,[POINT 2,2,31]
	PUSHJ P,@PLOTAB(1)
	GO ILOOP
PLOTAB:	[RVECT:	CALL(RELATE)↔CALL(PLTVEC,1,2)↔POP2J]
	[RPNT:	CALL(RELATE)↔DAC 1,COL↔DAC 2,ROW↔GO PLTVEC]
	[RIVECT: CALL(RELATE)↔DAC 1,COL↔DAC 2,ROW↔POP2J]
	RPNT
	[AVECT: CALL(ABSOLUTE)↔GO PLTVEC] ;ARGS ARE ALREADY STACKED
	[APNT:	CALL(ABSOLUTE)↔DAC 1,COL↔DAC 2,ROW↔GO PLTVEC]
	[AIVECT: CALL(ABSOLUTE)↔DAC 1,COL↔DAC 2,ROW↔POP2J]
	APNT
RELATE: SKIPE DELTA↔MOVSI -200000↔MUL IIIDX
	LAC 1,0↔ADD 1,COL↔ADDB 1,-3(P)
	SKIPE DELTA↔MOVSI -200000↔MUL IIIDY
	LAC 2,0↔ADDB 2,-2(P)↔ADD 1,ROW
	POP0J
ABSOLU:	LAC 1,BEGCOL↔ADDB 1,-3(P)
	LAC 2,BEGROW↔ADDB 2,-2(P)
	POP0J
BEND;2/8/73/(TVR)21 MAY 1973(BGB)---------------------------------
PLTVEC:	SETO↔LAC 2,ROW↔LAC 3,COL↔LAC 4,ARG1↔LAC 5,ARG2
	DAC 4,ROW↔DAC 5,COL↔CALL(MKSEG0)↔POP2J
SUBR(VIDEO)
BEGIN VIDEO;_________________________________________________________
	ACCUMULATORS{S2,S3,I,J,K,Q,P1,P2,R,C,TV}

COMMENT⊗ VIDEO FILE HEADER:
	0	-1
	1	6	BITS PER BYTE.
	2	=48	WORDS PER ROW.
	3	R1
	4	R2
	5	C1
	6	C2
	7	-WC,,ADR ⊗

;EXPECT AC-1 TO CONTAIN POINTER TO WORD ZERO OF VIDEO FILE IN CORE.
	LAC TV,1↔LAC 2(TV)↔DAC TVWIDTH#
	LAC 4(TV)↔SUB 3(TV)↔AOS↔DAC TVROWS#↔DZM TVROW0#
	LAC 6(TV)↔SUB 5(TV)↔AOS↔DAC TVCOLS#
	LAC R,ROW↔TRZ R,3    ;UPPER LEFT MOST CORNER OF IMAGE.
	CAMLE R,QHI↔POP0J    ;WHOLE VIDEO IMAGE BELOW THIS QPAGE.
	CAML R,QLO↔GO L0     ;VIDEO IMAGE STARTS ON THIS QPAGE.

;VIDEO IMAGE STARTS BEFORE THIS QUARTER PAGE.
L00:	SUB R,QLO↔ASH R,-2
	MOVM R,R↔DAC R,TVROW0#
	CAML R,TVROWS↔POP0J  ;WHOLE VIDEO IMAGE ABOVE THIS QPAGE.
	SUB R,TVROWS
	DACM R,TVROWS↔LAC R,QLO

;VIDEO BYTE POINTER.
L0:	LAC P1,1(TV)		;BYTE SIZE.
	IORI P1,4400↔ROT P1,-=12
	LAP P1,7(TV)↔ADD P1,1	;ORIGIN OF VIDEO IN CORE.
	LAC TVROW0↔IMUL TVWIDTH↔ADD P1,0

;POINTER INTO XGP BUFFER.
	LAC C,COL
	HLLZ 1,%(C)↔ROT 1,6
	HRRI 1,@%(R)↔CDR P2,1
;J = COLUMNS/9			9 4-BIT XGP BYTES PER WORD.
	LACI J,=36↔IDIV J,1(TV)
	IMUL J,2(TV)↔IDIVI J,=9↔DAC J,JSAV#	;COLUMNS/9
	LAC I,TVROWS
L1:	DAC P2,P2SAV#↔LAC J,JSAV
L2:	SETZB 0,1↔SETZB 2,3↔LACI K,=9
L3:	ILDB Q,P1
	TRZ Q,3↔ROTC 0,4↔ROTC 2,4
	IOR 0,HTT+0(Q)↔IOR 1,HTT+1(Q)
	IOR 2,HTT+2(Q)↔IOR 3,HTT+3(Q)↔SOJG K,L3
	CAIL C,=1728↔GO L4
	IORM 0,0*WWIDTH(P2)↔IORM 1,1*WWIDTH(P2)
	IORM 2,2*WWIDTH(P2)↔IORM 3,3*WWIDTH(P2)
L4:	AOS P2↔SOJG J,L2
	ADDI R,4↔CAMLE R,QHI↔POP0J
	LAC P2,P2SAV↔ADDI P2,4*WWIDTH
	SOJG I,L1
	POP0J
;HALF TONE TABLE.
HTT:	6↔7↔7↔6↔	6↔6↔7↔6↔	6↔6↔6↔6↔	6↔6↔6↔6
	6↔6↔6↔4↔	4↔6↔6↔4↔	4↔6↔6↔4↔	4↔4↔6↔4
	4↔4↔4↔4↔	4↔4↔4↔4↔	0↔4↔4↔4↔	4↔4↔4↔0
	0↔4↔4↔0↔	0↔0↔4↔0↔	0↔0↔4↔0↔	0↔0↔0↔0
BEND VIDEO;BGB 2 JUNE 1973.__________________________________________